|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。
コンセプト()は、プログラミング言語の機能。かつてC++への採用が検討されていたが、見送られた。ISO/IEC JTC1/SC22/WG21 C++ 標準化委員会によるC++0xの策定において2009年前半まで検討され、規格書のドラフトにも盛り込まれていたが、2009年7月13日の投票で削除されることが決まった〔InformIT, The Removal of Concepts From C++0x Jul 23, 2009. http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=441〕。 ==背景== C++では、テンプレートクラス・関数は引数とする型に必然的に何らかの制限を課す。例えば、STLコンテナは格納する型にデフォルトコンストラクタを要求する。 Foo& 型のオブジェクトを受ける関数にはFoo のあらゆるサブタイプを渡せる、というようなクラス階層によって提供される動的な多態とは違い、テンプレート引数には、テンプレートが使う演算をサポートするクラスならば何でも渡すことが出来る。しかし、通常の関数の場合は引数に対する要求は明確である(先の例なら、Foo のサブタイプであること)が、テンプレートの場合は、オブジェクトが持たなければならないインターフェースはテンプレート定義の中に隠れてしまっている。コンセプトはテンプレート引数が持たなくてはならないインターフェースを明文化する機構を提供する。コンセプトを導入する理由の一つは、エラーメッセージの質の改善である。テンプレートが必要とするインターフェースを持っていない型をプログラマが使おうとした場合、コンパイラはエラーを出す。しかし、その種のエラーは理解しがたいものになりやすく、特に初心者には非常に難解である。この理由としては、エラーメッセージにテンプレート引数が省略されずに表示され、非常に長いエラーメッセージが出力されてしまうことが多いことが挙げられる。コンパイラによっては、単純なミスが数キロバイトものエラーメッセージを出す結果になることもある。他の理由として、エラーメッセージがエラーの実際の理由を明確に示していないことがある、ということもある。例えば、コピーコンストラクタを持たないオブジェクトの vector を構築しようとした場合、大抵の場合のエラーメッセージは「内包するオブジェクトにコピーコンストラクタを呼んでしまったvector クラス」に言及するものになってしまう。熟練したプログラマでないと、本当のエラーが「vector に渡した型がvector の要件を満たしきれていないこと」が解らないだろう。抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「コンセプト (C++)」の詳細全文を読む スポンサード リンク
|